package com.fintech.third.service.bairong;

import java.util.List;
import java.util.Map;

import com.fintech.common.util.ApiResponse;
import com.fintech.third.model.EquipmentInfor;
import com.fintech.third.model.bairong.*;

import net.sf.json.JSONObject;

/**
 * 百融e保贷产品接口
 * @author tang.pw
 *
 */
public interface BaiRongService {


	/**
	 * 特殊名单核查
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return SpecialList
	 */

	public ApiResponse<SpecialList> specialListReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	
	/**
	 * 多次申请核查(用户近3个月、6个月、12个月在百融的虚拟信贷联盟(银行、非银)中的多次信贷申请情况。)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return MultipleApplications
	 */
	public ApiResponse<Applications> applicationsReport(JSONObject json,String serialNum,String loanId, String channel);
	/**
	 * 多次申请核查v2(用户近7/15天、1/3/6个月在百融的虚拟信贷联盟(银行、非银、非银细分类型)中的多次信贷申请情况)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return MultipleApplications
	 */
	public ApiResponse<MultipleApplications> multipleApplicationsReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 稳定性评估(用户身份证、手机号、邮箱、姓名、座机号等用户身份信息与百融行为库中的信息是否匹配，来检验信息的关联性和一致性)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return Stability
	 */
	public ApiResponse<Stability> stabilityReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 月度收支等级评估(月度收支等级评估产品是对用户入账和出账情况的统计评估，展示用户近18个月（自然月）的收支等级情况)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return IncomeMonthLevel
	 */
	public ApiResponse<IncomeMonthLevel> incomeMonthLevelReport(JSONObject json,String serialNum,String loanId, String channel);
	

	/**
	 * 月度收支等级评估补充版(月度收支等级评估补充版产品是对用户入账和出账情况的统计评估，对近1/3/6/12个月（自然月）的收支行为的综合评估)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return IncomeLevel
	 */
	public ApiResponse<IncomeLevel> incomeLevelReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 借款设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return LoanFacilityInformation
	 */
	public ApiResponse<LoanFacilityInformation> loanFacilityInformationReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 注册设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return RegisterFacilityInformation
	 */
	public ApiResponse<RegisterFacilityInformation> registerFacilityInformationReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 登录设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return LoginFacilityInformation
	 */ 
	public ApiResponse<LoginFacilityInformation> loginFacilityInformationReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 提现设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return CurrentEquipmentInformationReport
	 */
	public ApiResponse<CurrentEquipmentInformationReport> cashFacilityInformationReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 查询个人的法院失信被执行人、被执行人的执行案件信息(个人)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return DishonestExecutor
	 */
	public ApiResponse<DishonestExecutor> dishonestExecutorReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 查询个人的法院失信被执行人、被执行人的执行案件信息(企业)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return DishonestEnterprise
	 */
	public ApiResponse<DishonestEnterprise> dishonestEnterpriseReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 个人不良信息查询
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return BadInformation
	 */
	public ApiResponse<BadInformation> badInformationReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 手机二要素(根据姓名、手机号(移动、电信、联通)验证是否一致)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return TelTwoInformation
	 */
	public ApiResponse<TelTwoInformation> telTwoInformationReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 车辆违章查询
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return VehicleViolation
	 */
	public ApiResponse<VehicleViolation> vehicleViolationReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 手机三要素(验证移动、联通、电信手机号是否已经实名认证)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return TelCheck
	 */
	public ApiResponse<TelCheck> telCheckReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 学历查询
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return EductionInformation
	 */
	public ApiResponse<EductionInformation> eductionInformationReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 身份证二要素验证(核查身份证姓名是否一致)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return IdCardCheck
	 */
	public ApiResponse<IdCardCheck> idCardCheckReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 银行卡四要素验证(验证用户银行卡号、姓名、身份证号、手机号与银行预留信息是否一致)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return BankcardCheck
	 */
	public ApiResponse<BankcardCheck> bankcardCheckReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 银行卡三要素验证(验证用户银行卡号、姓名、身份证号与银行预留信息是否一致。)
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return
	 */
	public ApiResponse<BankcardCheckThree> bankcardCheckThreeReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 商品消费评估(商品消费产品查询用户商品消费行为，是对商品消费次数、金额和类目等维度的统计评估)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return ConsumAbbility
	 */
	public ApiResponse<ConsumAbbility> consumAbbilityReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 媒体阅览评估(媒体阅览评估产品查询用户媒体阅览行为，是对阅览天数、类别等维度的统计评估)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return MediaReading
	 */
	public ApiResponse<MediaReading> mediaReadingReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	
	/**
	 * 月度收支等级评估整合版(月度收支等级评估整合版产品是对用户入账和出账情况的统计评估，对近1/3/6/12个月（自然月）的收支行为的综合评估，匹配率更高)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return ReceiveAndConsumLevel
	 */
	public ApiResponse<ReceiveAndConsumLevel> receiveAndConsumLevelReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	
	/**
	 * 收支等级小额信贷版评估
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return MicroCreditLevel
	 */
	public ApiResponse<MicroCreditLevel> microCreditLevelReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	
	/**
	 * 支付消费评估(支付消费评估产品查询用户银行卡消费情况的统计评估，展示近12个月（自然月）支付行为情况（建议用户填其常用卡）)
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return PaymentConsum
	 */
	public ApiResponse<PaymentConsum> paymentConsumReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 支付消费小额信贷版评估(支付消费小额信贷版产品查询用户银行卡消费情况，对6个月（自然月）的支付行为综合评估（建议用户填其常用卡）)
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return MicroPaymentConsum
	 */
	public ApiResponse<MicroPaymentConsum> microPaymentConsumReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 支付消费行为偏好(用户银行卡行为偏好分析-近1、3、6个月（自然月）支付消费统计情况，并返回各模型综合评分)
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return PayBehavior
	 */
	public ApiResponse<PayBehavior> payBehaviorReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	
	/**
	 * 社交关系评估(社交关系评估产品查询用户社交关系信息统计情况)
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return SocietyRelation
	 */
	public ApiResponse<SocietyRelation> societyRelationReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 航旅—旅客价值等级查询(用户国内航旅行为消费等级评估，1-96等级表示不同的飞行频次、机票金额和折扣率)
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return AirTravelLevel
	 */
	public ApiResponse<AirTravelLevel> airTravelLevelReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	
	/**
	 * 手机在网状态(验证移动、联通、电信手机的在网状态)
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return TelStatus
	 */
	public ApiResponse<TelStatus> telStatusReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 个人对外投资
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return PerInvest
	 */
	public ApiResponse<PerInvest> perInvestReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	
	/**
	 * 企业基本信息查询
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return BizInfo
	 */ 
	public ApiResponse<BizInfo> bizInfoReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 企业对外投资
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return BizInvest
	 */
	public ApiResponse<BizInvest> bizInvestReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 企业关键字模糊查询(通过企业名称关键字查询企业基本信息及关联主键)
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return BizInfoKey
	 */
	public ApiResponse<BizInfoKey> bizInfoKeyReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 企业对外投资图谱(通过企业关联主键查询企业的投资公司和被投资公司（最多拓展3层），并返回各公司的基本情况)
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return BizInvestMap
	 */
	public ApiResponse<BizInvestMap> bizInvestMapReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 百融评分
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return Score
	 */
	public ApiResponse<Score> scoreReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 百融规则
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return RuleInformation
	 */ 
	public ApiResponse<RuleInformation> ruleReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	
	/**
	 * 设备特殊名单
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return
	 */
	public ApiResponse<EquipmentSpecialList> equipmentSpecialListInfo(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 设备采集信息
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return
	 */
	public ApiResponse<EquipmentInfo> equipmentInfo(JSONObject json,String serialNum,String loanId, String channel);
	
	/**
	 *	设备信息核查
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return
	 */
	public ApiResponse<EquipmentInfor> equipmentInformationVerification(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 保单贷打包调用所有接口
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @param channel
	 * @return
	 */
	public ApiResponse<BddPackAllInterfaceInfo>  packgeAllInterfaceInfo(JSONObject json,String serialNum,String loanId, String channel);
	
	
	
	
	/**
	 * 借款设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return LoanFacilityInformation
	 */
	public ApiResponse<LoanFacilityPackageInfo> loanFacilityInformationReportPack(Map<String, String> map);

	/**
	 * 注册设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return RegisterFacilityInformation
	 */
	public ApiResponse<RegisterFacilityPackageInfo> registerFacilityInformationReportPack(Map<String, String> map);

	/**
	 * 登录设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return LoginFacilityInformation
	 */ 
	public ApiResponse<LoginFacilityPackageInfo> loginFacilityInformationReportPack(Map<String, String> map);

	/**
	 * 提现设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return CurrentEquipmentInformationReport
	 */
	public ApiResponse<CurrentEquipmentPackageInfo> cashFacilityInformationReportPack(Map<String, String> map);
	
	
	/**
	 * 商城打包调用百融数据所有接口
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @param channel
	 * @return
	 */
	public ApiResponse<BddPackAllInterfaceInfo>  packgeAllBrInterfaceInfoForMall(JSONObject json,String serialNum,String loanId, String channel);
	
	
	/**
	 * 查询信用风险识别分数
	 * @param json ==> 必填参数：id身份证、cell手机号、name姓名
	 * @param serialNum
	 * @param loanId
	 * @param channel
	 * @return
	 */
	public ApiResponse<CreditRiskEvaluation> queryCreditRiskEvaluation(JSONObject json,String serialNum,String loanId, String channel);

	List<EdcBRDataQueryLogInfo> findEdcBRDataQueryLogInfo(String loanId);
}
